﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using AddProductLib;
using SkladLib;
using MessageBox = System.Windows.MessageBox;

namespace Rezervace
{
    
    public partial class MainWindow : Window
    {

        #region Proměnné + metody

        private bool _zacitUlozit;
        private bool _canClose = false;

        private string _carovyKod = "";

        private int _errors = 0;
        private readonly Zakaznik _zakaznik = new Zakaznik();

        private NovyZbozi _novyZbozi;
        private bool _upravit;

        private void Validation_Error(object sender, ValidationErrorEventArgs e)
        {
            if (e.Action == ValidationErrorEventAction.Added)
                _errors++;
            else
                _errors--;
        }

        #endregion
        

        #region Události Form

        public MainWindow()
        {
            InitializeComponent();

            grid_1.DataContext = _zakaznik;
        }

        private void HlavniOkno_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            switch (e.Text)
            {
                case "-":
                    InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new CultureInfo("en-US"));
                    _zacitUlozit = true;
                    _carovyKod = "";
                    e.Handled = true;
                    break;
                case "(":
                    InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new CultureInfo("cs-CZ"));
                    _zacitUlozit = false;
                    e.Handled = true;

                    try
                    {
                        // Otevrit okno NovyProdukt
                        AddProduct add = new AddProduct(_carovyKod);
                        add.PridatRezervaci += Form_PridatClicked;
                        add.ShowDialog();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Produkt není zaznamenán v databázi", "Upozornění", MessageBoxButton.OK, MessageBoxImage.Warning);
                    }
                    break;

                default:
                    if (_zacitUlozit)
                    {
                        e.Handled = true;
                        _carovyKod += e.Text;
                    }
                    break;
            }
        }

        #endregion


        #region Události komponentů

        private void Form_PridatClicked(object sender, PridatRezervaciEventArgs e)
        {
            _novyZbozi = new NovyZbozi(e.CarovyKod, e.NazevProduktu, e.OdDne, e.PocetDni, e.KeDni);
            if (!_upravit) list_SeznamZbozi.Items.Add(_novyZbozi);
        }

        private void bt_PridatDoSeznamu_Click(object sender, RoutedEventArgs e)
        {
            AddProduct add = new AddProduct();
            add.PridatRezervaci += Form_PridatClicked;
            add.ShowDialog();
        }

        private void bt_Upravit_Click(object sender, RoutedEventArgs e)
        {
            int indexSelectedZbozi = list_SeznamZbozi.SelectedIndex;

            if (indexSelectedZbozi >= 0)
            {
                _upravit = true;
                AddProduct add = new AddProduct(_novyZbozi);
                add.PridatRezervaci += Form_PridatClicked;
                add.ShowDialog();

                list_SeznamZbozi.Items.RemoveAt(indexSelectedZbozi);
                list_SeznamZbozi.Items.Insert(indexSelectedZbozi, _novyZbozi);
            }

            else
                MessageBox.Show("Není vybrané žádné zboží !", "Upozornění", MessageBoxButton.OK, MessageBoxImage.Warning);

            _upravit = false;
        }

        private void bt_Smazat_Click(object sender, RoutedEventArgs e)
        {
            if (list_SeznamZbozi.Items.Count > 0)
            {
                int indexSelectedZbozi = list_SeznamZbozi.SelectedIndex;
                list_SeznamZbozi.Items.RemoveAt(indexSelectedZbozi);
            }

            else
                MessageBox.Show("Není vybrané žádné zboží !", "Upozornění", MessageBoxButton.OK, MessageBoxImage.Warning);
        }

        #endregion


        #region Potvrdit, OK

        private void bt_OK_Click(object sender, RoutedEventArgs e)
        {
            if (_errors > 0)
                MessageBox.Show("Jméno nebo přijmení není platné !", "Upozornění", MessageBoxButton.OK,
                                MessageBoxImage.Stop);

            else if (list_SeznamZbozi.Items.Count == 0)
                MessageBox.Show("Nebylo vybrané žádné zboží !", "Upozornění", MessageBoxButton.OK,
                                MessageBoxImage.Stop);

            else
            {
                
                if(tb_Jmeno.Text == string.Empty && tb_Prijmeni.Text == string.Empty)
                    MessageBox.Show("Musíze zadat jméno a přijmení !", "Upozornění", MessageBoxButton.OK, MessageBoxImage.Warning);
                else if(list_SeznamZbozi.Items.Count == 0)
                    MessageBox.Show("Není vybrané žádné zboží !", "Upozornění", MessageBoxButton.OK, MessageBoxImage.Warning);
                else
                {
                    //Oprava David Rosko
                    
                    foreach (NovyZbozi zbozi in list_SeznamZbozi.Items)
                    {
                        Zbozi rezervovaneZbozi = Zbozi.GetZboziByCode(zbozi.CarovyKod);
                        rezervovaneZbozi.Rezervovat(tb_Jmeno.Text + " " + tb_Prijmeni.Text, zbozi.OdDne, zbozi.KeDni);
                    }
                    this.Close();
                }
            }
        }

        private void bt_Storno_Click(object sender, RoutedEventArgs e)
        {
            if (MessageBoxResult.Yes ==
                MessageBox.Show("Opravdu chcete stornovat všechny změny", "Upozornění", MessageBoxButton.YesNo,
                                MessageBoxImage.Warning))
                this.Close();
        }

        #endregion

    }

}
